module TipoProjeto

  projetos = {'implantacao'          => 'Implantação',
              'diversificacao'       => 'Diversificação',
              'afrmm'                => 'AFRMM',
              'ampliacao'            => 'Ampliação',
              'ato'                  => 'Ato Declaratório'}

  @@projetos_red_75_irpj = projetos.merge(
             {'modernizacao_total'   => 'Modernização Total',
              'modernizacao_parcial' => 'Modernização Parcial'}).freeze

  @@projetos_isencao_ou_depreciacao = projetos.merge(
             {'modernizacao'         => 'Modernização '}).freeze

  def self.all(incentivo = :red_75_irpj)
    incentivo = incentivo.to_sym
    valid_params = [:isencao_ou_depreciacao, :isencao_afrmm_iof, :depreciacao_acelerada, :red_75_irpj]
    unless valid_params.include? incentivo
      raise InvalidArgument, "received #{incentivo}, expected one of: #{valid_params.join(',')}"
    end

    incentivo = :isencao_ou_depreciacao if [:isencao_afrmm_iof, :depreciacao_acelerada].include? incentivo
    class_variable_get "@@projetos_#{incentivo}"
  end

  def self.descricao(incentivo = :red_75_irpj, tipo_projeto = nil)
    incentivo = incentivo.to_sym
    case incentivo
    when :red_75_irpj, :isencao_afrmm_iof, :depreciacao_acelerada
      all(incentivo)[tipo_projeto]
    when :red_12_5_irpj
      'Manutenção'
    when :reinvestimento_30_irpj
      'Complementação'
    end
  end

  def self.mnemonics(incentivo = :red_75_irpj)
    all(incentivo).keys
  end

  def self.documentos(tipo_projeto)
    Documento.all(:joins => :documentos_tipos_projeto,
                  :conditions => {:documentos_tipos_projeto => {:tipo_projeto => tipo_projeto}})
  end

end
